// 使用一个定时器
// 用 add / del 添加删除 ref
// 每次 1秒后 循环所有加入定时器的列表, 执行 ref.current

class Interval {
  constructor() {
    this.list = [];
    this.id = null;
  }

  add(ref) {
    this.list.push(ref);

    // 创建或使用定时器
    this.createInterval();
  }

  del(ref) {
    const index = this.list.findIndex((item) => {
      return item === ref;
    });

    if (index >= 0) {
      this.list.splice(index, 1);
    }

    // 没有需要更新的数据了, 就清除定时器
    this.clearInterval();
  }

  createInterval() {
    if (this.id) {
      return;
    }

    this.id = setInterval(() => {
      this.list.forEach((ref) => {
        ref.current();
      });
    }, 1000);
  }

  clearInterval() {
    if (this.list.length === 0) {
      clearInterval(this.id);
      this.id = null;
    }
  }
}

const interval = new Interval();

export default interval;
